多媒体数据库
以 root 权限进入 adb shell, /data/data/com.android.providers.media/databases 目录下就是存放数据库的地方。
以 external 开头的数据库存储的是 SD 卡媒体信息,一张卡对应一个,所以如果手机使用过多张卡会有多个数据库。以 internal
开头的数据库存储手机内部存储器的媒体信息。因为一般用户无法访问手机内部存储器,而且这两个数据库结构是大体上是相同的,所以只需要关注
external 数据库即可。
图片数据库
由两个表组成,images和thumbnails
images 图片
字段 |
解析 |
_id |
主键。图片 id,从 1 开始自增 |
_data |
图片绝对路径 |
_size |
文件大小,单位为 byte |
_display_name |
文件名 |
mime_type |
类似于 image/jpeg 的 MIME 类型 |
title |
不带扩展名的文件名(数据库里也存在部分带有扩展名的) |
date_added |
添加到数据库的时间,单位秒 |
date_modified |
文件最后修改时间,单位秒 |
description |
|
picasa_id |
用于 picasa 网络相册 |
isprivate |
|
latitude |
纬度,需要照片有 GPS 信息 |
longitude |
经度,需要照片有 GPS 信息 |
datetaken |
取自 EXIF 照片拍摄时间,若为空则等于文件修改时间,单位毫秒 |
orientation |
取自 EXIF 旋转角度,在图库旋转图片也会改变此值 |
mini_thumb_magic |
取小缩略图时生成的一个随机数,见 MediaThumbRequest |
bucket_id |
相册(文件夹)id。等于 path.toLowerCase.hashCode(),见MediaProvider.computeBucketValues() |
bucket_display_name |
直接包含图片的文件夹就是该图片的 bucket,就是文件夹名 |
width |
图片宽度 |
height |
图片高度 |
thumbnails 缩略图
字段 |
解析 |
_id |
主键。缩略图 id,从 1 开始自增 |
_data |
图片绝对路径 |
image_id |
缩略图所对应图片的 id,依赖于 images 表 _id 字段,可建立外键 |
kind |
缩略图类型,1 是大缩略图,2 基本不用,3 是微型缩略图但其信息不保存在数据库 |
width |
缩略图宽度 |
height |
缩略图高度 |
视频数据库
video
字段 |
解析 |
_id |
主键。视频 id |
_data |
视频绝对路径 |
_display_name |
文件名 |
_size |
文件大小,单位为 byte |
mime_type |
类似于 video/avi 的 MIME 类型 |
date_added |
添加到数据库的时间,单位秒 |
date_modified |
文件最后修改时间,单位秒 |
title |
不带扩展名的文件名 |
duration |
视频时长,单位毫秒 |
artist |
艺术家 |
album |
专辑名,一般为文件夹名 |
resolution |
分辨率 |
description |
|
isprivate |
|
tags |
|
category |
|
language |
|
mini_thumb_data |
|
latitude |
经度 |
longitude |
纬度 |
datetaken |
录制时间,单位毫秒 |
mini_thumb_magic |
取小缩略图时生成的一个随机数,见 MediaThumbRequest |
bucket_id |
等于 path.toLowerCase.hashCode(),见 MediaProvider.computeBucketValues() |
bucket_display_name |
直接包含视频的文件夹就是该图片的 bucket,就是文件夹名 |
bookmark |
|
width |
视频宽度 |
height |
视频高度 |
videothumbnails
字段 |
解析 |
_id |
主键。缩略图 id |
_data |
缩略图绝对路径 |
video_id |
缩略图所对应视频的 id,依赖于 video 表 _id 字段 |
kind |
缩略图类型,1 是大图,视频只能取类型 1 |
width |
缩略图宽度 |
height |
缩略图高度 |
音频数据库
这个比较复杂,由多个表组成
album_art:专辑封面
字段 |
解析 |
album_id |
主键。专辑 id |
_data |
专辑封面缓存的路径 |
albums:专辑
字段 |
解析 |
album_id |
主键。专辑 id |
album_key |
全大写字母,用于字母索引 |
album |
专辑名 |
album_info:专辑信息
字段 |
解析 |
_id |
主键 |
album |
专辑名 |
album_key |
专辑key |
minyear |
年代 |
maxyear |
|
artist |
艺术家 |
artist_id |
艺术家id |
artist_key |
艺术家key |
numsongs |
歌曲数量 |
album_art |
字段 |
解析 |
locale |
默认字符编码,例如 zh_CN |
artists:艺术家
字段 |
解析 |
artist_id |
主键。艺术家 id |
artist_key |
全大写字母,用于字母索引 |
artist |
艺术家 |
artist_info
字段 |
解析 |
_id |
主键。映射 id |
artist |
艺术家 |
artist_key |
|
number_of_albums |
|
number_of_tracks |
artists_albums_map
audio_genres:流派
字段 |
解析 |
_id |
主键。流派 id |
name |
流派名称 |
audio_genres_map:音频流派映射
字段 |
解析 |
_id |
主键。映射 id |
audio_id |
音频 id |
genre_id |
流派 id |
为何要建立映射表:为了消除数据冗余。假如有大量音频属于同一流派,如果没有映射表则需要每个音频都需要记录同样的流派数据,有了映射表之后则只有一条记录就够了。这符合数据库设计的第三范式(the 3rd normal form)
字段 |
解析 |
_id |
主键。音频 id |
_data |
文件绝对路径 |
_display_name |
文件名 |
_size |
文件大小,单位 byte |
mime_type |
类似于 audio/mpeg 的 MIME 类型 |
date_added |
添加到数据库的时间,单位秒 |
is_drm |
是否有drm版权 |
date_modified |
文件最后修改时间,单位秒 |
title |
来自 ID3 信息的标题,无则为不带扩展名的文件名 |
title_key |
全大写字母的标题 |
duration |
时长 |
artist_id |
艺术家 id |
composer |
来自 ID3 信息,作曲家 |
album_id |
专辑 id |
track |
来自 ID3 信息,音轨 |
year |
来自 ID3 信息,年代 |
is_ringtone |
是否铃声,0 或 1 |
is_music |
是否音乐,1 才会在音乐播放器显示 |
is_alarm |
是否闹钟铃声 |
is_notification |
是否通知铃声 |
is_podcast |
是否 podcast |
bookmark |
|
album_artist |
audio_playlists:播放列表
字段 |
解析 |
_id |
主键。播放列表 id |
_data |
|
name |
播放列表名 |
date_added |
|
date_modified |
audio_playlists_map:音频播放列表映射
字段 |
解析 |
_id |
主键。映射 id |
audio_id |
音频 id |
playlist_id |
播放列表 id |
play_order |
播放顺序 |